package org.yun.common.utils.appInterface;


import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import java.io.Serializable;

public class Message implements Serializable {

    private static final long serialVersionUID = -5086348508695047475L;

    /**
     * 类型
     */
    public enum Type {

        /**
         * 成功
         */
        success,

        /**
         * 警告
         */
        warn,

        /**
         * 错误
         */
        error
    }

    /**
     * 类型
     */
    private Type type;

    /**
     * 内容
     */
    private String content;

    /**
     * 初始化一个新创建的 Message 对象，使其表示一个空消息。
     */
    public Message() {

    }

    /**
     * 初始化一个新创建的 Message 对象
     *
     * @param type    类型
     * @param content 内容
     */
    public Message(Type type, String content) {
        this.type = type;
        this.content = content;
    }

    /**
     * 返回成功消息
     *
     * @param content 内容
     * @return 成功消息
     */
    public static Message success(String content) {
        return new Message(Type.success, content);
    }

    /**
     * 返回警告消息
     *
     * @param content 内容
     * @return 警告消息
     */
    public static Message warn(String content) {
        return new Message(Type.warn, content);
    }

    /**
     * 返回错误消息
     *
     * @param content 内容
     * @return 错误消息
     */
    public static Message error(String content) {
        return new Message(Type.error, content);
    }

    /**
     * 获取类型
     *
     * @return 类型
     */
    public Type getType() {
        return type;
    }

    /**
     * 设置类型
     *
     * @param type 类型
     */
    public void setType(Type type) {
        this.type = type;
    }

    /**
     * 获取内容
     *
     * @return 内容
     */
    public String getContent() {
        return content;
    }

    /**
     * 设置内容
     *
     * @param content 内容
     */
    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return content;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o instanceof Message == false) {
            return false;
        }
        Message m = (Message) o;
        return new EqualsBuilder().append(getType(), m.getType()).append(getContent(), m.getContent()).isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append(type).append(content).toHashCode();
    }
}
